package com.model;


import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;


/**
 * @InterfaceName PersonConverter
 * @Description DO 映射 DTO 的mapper接口，此接口编译之后会自动生成一个实现类（位于target/classes中）
 *  此接口使用到@Mapper注解(org.mapstruct.Mapper)，
 *  @Mapper 注解的 componentModel 属性，componentModel 属性用于指定自动生成的接口实现类的组件类型，这个属性支持四个值：
 *      default: 这是默认的情况，mapstruct 不使用任何组件类型, 可以通过Mappers.getMapper(Class)方式获取自动生成的实例对象。
 *      spring: 生成的实现类上面会自动添加一个@Component注解，可以通过Spring的 @Autowired方式进行注入
 *      cdi: the generated mapper is an application-scoped CDI bean and can be retrieved via @Inject
 *      jsr330: 生成的实现类上会添加@javax.inject.Named 和@Singleton注解，可以通过 @Inject注解获取
 * @Author cyj
 * @Version 1.0
 **/
@Mapper
public interface MedoConverter {

    /** 默认的方式 **/
    MedoConverter INSTANCE = Mappers.getMapper(MedoConverter.class);


//    @Mappings({
//            @Mapping(target = "birthDay", expression = "java(medo2.getBirthDay().getTime())"),
//    })
//    Medo3 domain2dto(Medo2 medo2);



//    @Mappings({
//            @Mapping(source = "birthday", target = "birth"),//不同名转换
//            @Mapping(source = "birthday", target = "birthDateFormat", dateFormat = "yyyy-MM-dd HH:mm:ss"),//不同数据类型转换
//            @Mapping(target = "birthExpressionFormat", expression = "java(org.apache.commons.lang3.time.DateFormatUtils.format(person.getBirthday(),\"yyyy-MM-dd HH:mm:ss\"))"),
//            @Mapping(source = "user.age", target = "age"),//复杂转换
//            @Mapping(target = "email", ignore = true)//忽略,不进行转换
//    })
//    PersonDTO domain2dto(Person person);

}
